package Thread.Thread_Security;
//对于多线程来说，最大的困难就是在于“随机调度，抢占式执行”
public class Demo18 {
    private static int count=0;
    public static void main(String[] args) throws InterruptedException {
        Thread t1=new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                count++;
            }
        });
        Thread t2=new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                count++;
            }
        });
        //第一种写法，并行执行，结果每次都不一样，线程不安全
        //cpu调度的过程是随机的，正是因为这个随机导致每个线程的指令调度顺序不一致导致的数据不一致，线程不安全

        /*
        t1.start();
        t2.start();
        t1.join();
        t2.join();
         */
        //第二种写法，串行执行，没问题，达到预期结果
        t1.start();
        t1.join();
        t2.start();
        t2.join();
        System.out.println("count:"+count);
    }
}
